﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Security;

namespace eDoc
{
    public partial class login : System.Web.UI.Page
    {
        private BO.Sescurity _security = new BO.Sescurity();
        private BO.AuthenUser _authenUser = new BO.AuthenUser();
        protected void Page_Load(object sender, EventArgs e)
        {
            if(_security.CheckLogin(HttpContext.Current))
                Response.Redirect("/listapp.aspx");

            if (!IsPostBack)
            {
                BindAppMode();
            }
        }

        private void BindAppMode()
        {
            DataTable dt = new DataTable();
            dt = BO.Data.Select_AppMode();
            ListItem list = new ListItem();
            list.Text = "-- Chọn --";
            list.Value = "0";
            ddlAppMode.Items.Add(list);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                list = new ListItem();
                list.Text = dt.Rows[i]["Mode_Name"].ToString();
                list.Value = dt.Rows[i]["ID"].ToString();
                ddlAppMode.Items.Add(list);
            }
        }

        protected void btLogin_Click(object sender, EventArgs e)
        {
            string user = txtUser.Text.Trim().ToLower();
            string pass = txtPass.Text.Trim();
            if (user == "")
            {
                lblNote.Text = "Bạn chưa nhập tên đăng nhập!";
                return;
            }

            if (pass == "")
            {
                lblNote.Text = "Bạn chưa nhập mật khẩu!";
                return;
            }
            
            if (user != eDoc.BO.Sescurity.UserRoleAdmin)
            {
                if (ddlAppMode.SelectedValue == "0")
                {
                    lblNote.Text = "Bạn chưa chọn loại nhân viên!";
                    ddlAppMode.Focus();
                    return;
                }
            }

            CheckLogin(txtUser.Text.Trim(), txtPass.Text.Trim());
        }

        private void CheckLogin(string user, string pass)
        {
            try
            {
                if (BO.Common.CheckAuthen)
                {
                    //login bang user cua AITS
                    if (BO.Sescurity.Login(user, pass))
                    {
                        //Username, Password, Udid, PartnerCode, SupperUser, AppMode, Actived, Disable, Email
                        BO.Data.Insert_User(user, BO.Common.CreateMD5Hash(pass), "", BO.Common.PartnerCode, false, 1, true, false, user);
                        DataTable dtMenuAlaysVisible = BO.Data.Select_Menu_AlwaysVisible();
                        string menuId = "";
                        if (dtMenuAlaysVisible != null && dtMenuAlaysVisible.Rows.Count > 0)
                        {
                            for (int i = 0; i < dtMenuAlaysVisible.Rows.Count; i++)
                            {
                                menuId += dtMenuAlaysVisible.Rows[i]["ID"].ToString() + ",";
                            }
                        }

                        // Luu vao User_Menu
                        BO.Data.Insert_User_Menu(user, menuId.TrimEnd(','));
                        SaveCookie(user, user, Convert.ToInt32(ddlAppMode.SelectedValue), "");
                    }
                    else
                    {
                        LoginUserLocal(user, pass);
                    }
                }
                else // login user local
                {
                    LoginUserLocal(user, pass);
                }
            }
            catch (Exception ex)
            {
                Global.log.Error("Error Login: " + ex);
                lblNote.Text = "Có lỗi xẩy ra. Xin vui lòng kiểm tra lại thông tin!";
            }
        }

        private void LoginUserLocal(string user, string pass)
        {
            DataTable dt = new DataTable();

            if (user == BO.Sescurity.UserRoleAdmin)
            {
                dt = BO.Data.Login(user, BO.Common.CreateMD5Hash(pass));
            }
            else
            {
                dt = BO.Data.Login(user, BO.Common.CreateMD5Hash(pass), Convert.ToInt32(ddlAppMode.SelectedValue));
            }

            if (dt != null && dt.Rows.Count > 0)
            {
                if (Convert.ToBoolean(dt.Rows[0]["Disable"]))
                {
                    lblNote.Text = "Tài khoản của bạn đã bị khóa!";
                    return;
                }
                if (!Convert.ToBoolean(dt.Rows[0]["Actived"]))
                {
                    lblNote.Text = "Tài khoản của bạn chưa được kích hoạt!";
                    return;
                }

                DataTable dtMenuChild = new DataTable();
                dtMenuChild = BO.Data.Select_MenuChild_by_User(user);

                string returnUrl = "";
                if (dtMenuChild != null && dtMenuChild.Rows.Count > 0)
                {
                    returnUrl = dtMenuChild.Rows[0]["url"].ToString();
                }

                SaveCookie(dt.Rows[0]["Email"].ToString(), dt.Rows[0]["Username"].ToString(), Convert.ToInt32(ddlAppMode.SelectedValue), returnUrl);
            }
            else
            {
                lblNote.Text = "Bạn nhập sai thông tin đăng nhập!";
                return;
            }
        }

        private void SaveCookie(string email, string user, int appMode, string returnUrl)
        {
            if (user != BO.Sescurity.UserRoleAdmin)
            {
                //Session["Portal_AppMode"] = ddlAppMode.SelectedValue;
                _authenUser.AppMode = appMode;
            }
            Session.Timeout = 30;
            _authenUser.Email = email;
            _authenUser.Username = user;
            _security.UserSignIn(_authenUser, HttpContext.Current);

            if (string.IsNullOrEmpty(returnUrl))
            {
                Response.Redirect("/listapp.aspx");
            }
            else
            {
                Response.Redirect(returnUrl);
            }
        }
    }
}